package com.life.ai.server.modules.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.life.ai.server.common.domain.PageQuery;
import com.life.ai.server.modules.system.entity.SysUser;
import com.life.ai.server.modules.system.model.dto.ModifyPwdDTO;
import com.life.ai.server.modules.system.model.dto.SysUserDTO;
import com.life.ai.server.modules.system.model.dto.UpdateStatusDTO;
import com.life.ai.server.modules.system.model.dto.UserQueryDTO;
import com.life.ai.server.modules.system.model.vo.SysUserInfoVO;
import com.life.ai.server.modules.system.model.vo.SysUserVO;

import java.util.List;

/**
 * <p>
 * 用户信息表 服务类
 * </p>
 *
 * @author kyle
 * @since 2024-06-14
 */
public interface SysUserService extends IService<SysUser> {

    /**
     * 获取用户信息(缓存)
     *
     * @param userId 用户id
     * @return SysUser
     */
    SysUser queryOne(Long userId);

    /**
     * 获取当前登录用户信息
     *
     * @return SysUserInfoVO
     */
    SysUserInfoVO getUserInfoByUserId(Long userId);

    /**
     * 分页查询
     *
     * @param pageQuery 分页参数
     * @param userQuery   查询条件
     * @return Page<SysUser>
     */
    Page<SysUserVO> queryPage(PageQuery pageQuery, UserQueryDTO userQuery);

    /**
     * 新增用户
     *
     * @param sysUserDTO 新增信息
     */
    void addUser(SysUserDTO sysUserDTO);

    /**
     * 修改用户
     *
     * @param sysUserDTO 修改信息
     */
    void updateUser(SysUserDTO sysUserDTO);

    /**
     * 批量修改用户状态
     */
    void updateStatus(UpdateStatusDTO updateStatusDTO);

    /**
     * 删除用户
     *
     * @param userId 用户id
     */
    void delete(Long userId);

    /**
     * 批量删除用户
     *
     * @param userIds 用户id集合
     */
    void deleteBatch(List<Long> userIds);

    /**
     * 重置密码
     *
     * @param userId 用户id
     */
    void resetPwd(Long userId);

    /**
     * 修改密码
     *
     * @param modifyPwdDTO 修改密码参数
     */
    void modifyPwd(ModifyPwdDTO modifyPwdDTO);

    /**
     * 修改密码
     *
     * @param id          用户id
     * @param newPassword 新密码
     */
    void updatePassword(Long id, String newPassword);
}
